//? 关键字interface用来表示抽象对象(接口) 具体要class implement去实现

//? 1.可选属性 在属性后面加问号
interface Person{
  name:string; // 必选属性,在这个子类型中必须保持一致
  age?:number;
}

let tom:Person={
  name:'tom'
}
//? 2.任意属性
interface Person2{
  name:string; // 必选属性,在这个子类型中必须保持一致
  // age?:number;// 报错,任意属性的类型为string时,也就是propName为string可选属性的类型不是任意属性类型的子集
  [propName:string]:string;
}

//? 3.自读属性
interface Person3{
  name:string; // 必选属性,在这个子类型中必须保持一致
  // age?:number;// 报错,可选属性的类型不是任意属性类型的子集
  [propName:string]:string;
  readonly gender : string;
}
